home *** CD-ROM | disk | FTP | other *** search
/ Suzy B Software 2 / Suzy B Software CD-ROM 2 (1994).iso / extras / programm / gemfsc20 / gemfsc20.lzh / GEMFUNCS / OBJRBUTL.C < prev    next >
C/C++ Source or Header  |  1992-11-03  |  2KB  |  75 lines

  1. /**************************************************************************
  2.  * OBJRBUTL.C - Functions for working with radio buttons.
  3.  *************************************************************************/
  4.  
  5. #include "gemfintl.h"
  6.  
  7. /*-------------------------------------------------------------------------
  8.  * obj_rbfind - Extended radio button finder.
  9.  *-----------------------------------------------------------------------*/
  10.  
  11. short obj_rbfind(tree, parent, rbstate)
  12.     register OBJECT *tree;
  13.     register short    parent;
  14.     register short    rbstate;
  15. {
  16.     register short    kid;
  17.     register OBJECT *pobj;
  18.  
  19.     kid = tree[parent].ob_head;
  20.  
  21.     while ( (kid != parent) && (kid >= R_TREE) ) {
  22.         pobj = &tree[kid];
  23.         if ((pobj->ob_flags & RBUTTON) && (pobj->ob_state & rbstate)) {
  24.             return kid;
  25.         }
  26.         kid = pobj->ob_next;
  27.     }
  28.     return NO_OBJECT;
  29. }
  30.  
  31. /*-------------------------------------------------------------------------
  32.  * obj_parent - Find the parent of a given child object.
  33.  *-----------------------------------------------------------------------*/
  34.  
  35. short obj_parent(tree, curobj)
  36.     register OBJECT *tree;
  37.     register short    curobj;
  38. {
  39.     register short    nxtobj;
  40.                  
  41.     if (curobj == R_TREE)    /* The root of a tree has no parent */
  42.         return R_TREE;
  43.  
  44.     for (;;) {
  45.         nxtobj = tree[curobj].ob_next;
  46.         if (tree[nxtobj].ob_tail == curobj)
  47.             return nxtobj;
  48.         curobj = nxtobj;
  49.     }
  50. }
  51.  
  52. /*-------------------------------------------------------------------------
  53.  * obj_rbselect - Set a radio button to SELECTED, de-sel others in the group.
  54.  *-----------------------------------------------------------------------*/
  55.  
  56. short obj_rbselect(ptree, selobj, state)
  57.     register OBJECT *ptree;
  58.     register short    selobj;
  59.     register short    state;
  60. {
  61.     register short    oldobj;
  62.  
  63.     if (selobj <= R_TREE) {
  64.         return NO_OBJECT;
  65.     }
  66.  
  67.     oldobj = obj_rbfind(ptree, obj_parent(ptree, selobj), state);
  68.     if (oldobj != NO_OBJECT) {
  69.         ptree[oldobj].ob_state &= ~state;
  70.     }
  71.     ptree[selobj].ob_state |= state;
  72.     return oldobj;
  73. }
  74.  
  75.